package jp.oesf.rss;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

//import android.os.Bundle;
import android.util.Log;

/*
 * HttpClientManager
 *
 * Http通信クラス
 *
 * @note 接続先は以下固定とする
 *			http://www.oesf.jp/modules/news/index.php?page=rss
 *
 */
public class HttpClientManager {

	// 接続先URL
	private static final String URL = "http://www.oesf.jp/modules/news/index.php?page=rss";
	// 一度に読み込むサイズ
	private static final int READ_BUFF_SIZE = 1024;
	// ログ識別用クラス名
	private static final String TAG = "HttpClientManager";

	/*
	 *
	 *	HTTP通信
	 * 		所定のURLに接続し、レスポンスデータを文字列で変換する
	 *
	 * @result 異常時 Stringにnull返却
	 *
	 */
	public String execute() {

		String content = "";
		// DefaultHttpClientオブジェクトの生成する
		DefaultHttpClient client = new DefaultHttpClient();
		// GETメソッドで接続するリクエストオブジェクトの生成する
		HttpGet get = new HttpGet(URL);

		try {
			// リクエストを発行してレスポンスを取得する
			HttpResponse res = client.execute(get);
			// ステータスコードのチェックする
			if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
				Log.v(TAG, "status ok");
				content = getContents(res);
				//戻りstrがnullの場合もそのまま返却
			}
		} catch (Exception e) {
			content = null;
			Log.e(TAG, Log.getStackTraceString(e));
		}
		return content;
	}

	/*
	 *
	 * HTTP通信レスポンス結果を文字列に変換
	 *
	 * @note 読み込みサイズはreadBuffSize固定!
	 *
	 */
	private String getContents(HttpResponse res) {

		InputStream inputStream = null;
		ByteArrayOutputStream outputStream = null;
		// 一度に読み込むサイズ
		byte[] line = new byte[READ_BUFF_SIZE];
		String data = null;
		int size = 0;

		try {
			// レスポンスからInputStreamを取得する
			inputStream = res.getEntity().getContent();
			outputStream = new ByteArrayOutputStream();

			// HTTPレスポンスデータを読み込む
			while (true) {
				size = inputStream.read(line);
				if (size <= 0) {
					break;
				}
				outputStream.write(line, 0, size);
			}
			// バイト配列を文字列に変換する
			data = new String(outputStream.toByteArray());
		} catch (Exception e) {
			Log.e(TAG, Log.getStackTraceString(e));
			data = null;
		}finally{
			try {
				if (inputStream != null) {
					inputStream.close();
				}
				if (outputStream != null) {
					outputStream.close();
				}
			} catch (Exception e) {
				Log.e(TAG, Log.getStackTraceString(e));
			}
		}
		return data;
	}
}
